"""
多态的介绍：
    概述：
        多态指的是同一个事物在不同场景下表现出来的不同形态，状态
        Python中的多态指的是，同一个函数，传入不同的对象，实现不同的结果

    多态的前提条件：
        1：要有继承关系统。
        2：要有方法重写。
        3：要有父类引用指向子类对象。

    好处：
        提高代码的可扩展性

    应用场景：
        父类型充当函数形参的类型，可以接收其任意的子类对象。
"""
# 需求：动物案例。
class Animal(object):
    def speak(self):
        print("动物叫")

# 定义狗这个类，继承自 Animal，重写speak方法
class Dog(Animal):
    def speak(self):
        print("汪汪汪")

# 定义猫这个类，继承自Animal，重写speak方法。
class Cat(Animal):
    def speak(self):
        print("喵喵喵")

class Phone(object):
    def speak(self):
        print("手机发出声音")

def make_noise(animal: Animal):
    # if isinstance(animal, Animal):
        animal.speak()

if __name__ == '__main__':
    # 2: 创建对象
    d1 = Dog()
    c1 = Cat()
    p1 = Phone()

    make_noise(d1)
    make_noise(c1)

    print("----------------")
    # 伪多态
    make_noise(p1)
